home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -screenplay- / hd_installers / -whdload- / whdload_dev / patcher1.04.lha / Patcher1.04 / PARAMQTX / imagergemx.asm next >
Assembly Source File  |  1997-05-20  |  7KB  |  365 lines

  1. ;another example of a formatconversion, this time for a hd-install
  2. ;the gemx-disk has some gaps, and due highscorefile there will be
  3. ;5 parts created
  4.  
  5.     INCDIR    ASM-ONE:INCLUDE2.0/
  6.  
  7.     INCLUDE    OWN/Patcher.I
  8.     INCLUDE    DEVICES/TRACKDISK.I
  9.     INCLUDE    EXEC/EXEC_LIB.I
  10.     INCLUDE    EXEC/IO.I
  11.     INCLUDE    LIBRARIES/DOS_LIB.I
  12.  
  13.  
  14. HP    MOVEQ.L    #20,D0
  15.     RTS
  16.     DC.L    TAB
  17.     DC.B    'PTCH'
  18.     DC.B    '$VER:Gemx_Diskimager_V1.01',0
  19.     EVEN
  20.  
  21. TAB    DC.L    PCH_INIT,INITROUT
  22.     DC.L    PCH_FILECOUNT,5
  23.     DC.L    PCH_ADAPTOR,ADNAME
  24.     DC.L    PCH_DISKNAME,DISKNAMEARRAY
  25.     DC.L    PCH_FILENAME,FILENAMEARRAY
  26.     DC.L    PCH_CHANGES,CHANGESARRAY    
  27.     DC.L    PCH_NAME,PARAMNAME
  28.     DC.L    PCH_DATALENGTH,LENGTHTABLE
  29.     DC.L    PCH_SPECIAL,SPECIALARRAY
  30.     DC.L    PCH_STATE,STATEARRAY
  31.     DC.L    PCH_STATE2,STATEARRAY2
  32.     DC.L    PCH_MINVERSION,VERSNAME        ;minimum version of THE PATCHER
  33.     DC.L    0
  34.  
  35. ;minimum version of the patcher required, its a commandline-parameter
  36. VERSNAME    DC.B    'V1.01'        ;MAY NOT CONTAIN HEADING ZEROES
  37.     EVEN                ;MUST CONTAIN 2 NUMBERS AFTER POINT
  38.  
  39.  
  40. ADNAME    DC.B    'Done by Harry.',0
  41.     EVEN
  42.  
  43.  
  44. PARAMNAME    DC.B    'Gemx, Diskimager for HD-install',0
  45.     EVEN
  46.  
  47.  
  48. DISKNAMEARRAY    DC.L    DISK1NAME
  49.     DC.L    DISK1NAME
  50.     DC.L    DISK1NAME
  51.     DC.L    DISK1NAME
  52.     DC.L    DISK1NAME
  53.  
  54. DISK1NAME    DC.B    'Gemx',0
  55.     EVEN
  56.  
  57.  
  58. FILENAMEARRAY    DC.L    FILE1NAME
  59.     DC.L    FILE2NAME
  60.     DC.L    FILE3NAME
  61.     DC.L    FILE4NAME
  62.     DC.L    FILE5NAME
  63.  
  64. FILE1NAME    DC.B    'disk.1',0
  65.     EVEN
  66. FILE2NAME    DC.B    'disk.2',0
  67.     EVEN
  68. FILE3NAME    DC.B    'disk.3',0
  69.     EVEN
  70. FILE4NAME    DC.B    'disk.4',0
  71.     EVEN
  72. FILE5NAME    DC.B    'disk.5',0
  73.     EVEN
  74. ;FILE1NAME    DC.B    'Gemx002',0
  75. ;    EVEN
  76. ;FILE2NAME    DC.B    'Gemx074',0
  77. ;    EVEN
  78. ;FILE3NAME    DC.B    'Gemx083',0
  79. ;    EVEN
  80. ;FILE4NAME    DC.B    'Gemx084',0
  81. ;    EVEN
  82. ;FILE5NAME    DC.B    'Gemx130',0
  83. ;    EVEN
  84.  
  85. LENGTHTABLE    DC.L    $3b*$1800
  86.     DC.L    (83-74)*$1800
  87.     DC.L    $1800            ;HIGHSCORE!
  88.     DC.L    43*$1800
  89.     DC.L    $1E*$1800
  90.     
  91. CHANGESARRAY    DC.L    0        ;no changes to made in cycle 1
  92.     DC.L    0
  93.     DC.L    0            ;no changes to made in cycle 3
  94.     DC.L    0
  95.     DC.L    0
  96.  
  97. ;the parameter-initializing opens sourcedevice 
  98. INITROUT    MOVEQ.L    #0,D0
  99.     MOVE.L    PTB_OPENDEVICE(A5),A0
  100.     JSR    (A0)
  101.     TST.L    D0
  102.     RTS
  103.  
  104. ;loading-statetexts for the cycles
  105. STATEARRAY    DC.L    LOADSTATE2
  106.     DC.L    LOADSTATE2
  107.     DC.L    LOADSTATE2
  108.     DC.L    LOADSTATE2
  109.     DC.L    LOADSTATE2
  110.  
  111.  
  112. LOADSTATE2
  113.     DC.B    'Please insert your original writepro-',$A
  114.     DC.B    'tected disk in the source drive.',0
  115.     EVEN
  116.  
  117. STATEARRAY2    DC.L    SAVESTATE        ;no text in cycle 1
  118.     DC.L    SAVESTATE
  119.     DC.L    SAVESTATE
  120.     DC.L    SAVESTATE
  121.     DC.L    SAVESTATE
  122.  
  123.  
  124. SAVESTATE    
  125.     DC.B    'Please insert your destination disk.',0
  126.     EVEN
  127.  
  128. ;routines to 'load' something
  129. SPECIALARRAY    DC.L    LOADROUT
  130.     DC.L    LOADROUT        ;load stuff from original
  131.     DC.L    LOADROUT
  132.     DC.L    LOADROUT
  133.     DC.L    LOADROUT
  134.  
  135. STARTTRACK
  136.     DC.B    2,$25*2,83,84,$41*2
  137.     EVEN
  138.  
  139. LOADROUT
  140. ;.xxx    bra.s    .xxx
  141.     MOVEQ.L    #0,D7                ;one diskchange allowed
  142. .NEU
  143. .4    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1    ;disk in sourcedrive?
  144.     MOVE.W    #TD_CHANGESTATE,IO_COMMAND(A1)
  145.     MOVE.L    (_SYSBASE).W,A6
  146.     JSR    _LVODOIO(A6)
  147.     TST.L    IO_ACTUAL(A1)
  148.     BNE.W    .NOTORG
  149.  
  150.     MOVE.L    PTB_ADDRESSOFFILE(A5),A4    ;load first part of disk
  151.     LEA.L    (A4),A2            ;offset to load in the dataspace
  152.     MOVEQ.L    #0,D2
  153.     MOVE.B    STARTTRACK(PC,D6.W),D2        ;starttrack on the disk
  154.     LEA.L    LENGTHTABLE(PC),A3
  155.     MOVE.L    D6,D3
  156.     LSL.L    #2,D3
  157.     MOVE.L    (A3,D3.L),D3            ;bytes to read
  158.     MOVEQ.L    #0,D4                ;data from the start of the track
  159. ;    bra.s    .5                ;because reading starts with
  160.                         ;trackstart, this is obsolete
  161.  
  162. .3    TST.L    D4
  163.     BNE.S    .1
  164. .5    MOVEQ.L    #$4,D5                ;4 tries, then error
  165. .55    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1
  166.     MOVE.L    PTB_SPACE(A5),IO_DATA(A1)    ;track is to load in PTB_SPACE
  167.     MOVE.L    #$7C00,IO_LENGTH(A1)        ;double length of track
  168.                         ;to decode the index-sync-read data
  169.     MOVE.L    D2,D0                ;my own trackcounter
  170.     EOR.B    #1,D0                ;disksides are reverse
  171.     MOVE.L    D0,IO_OFFSET(A1)
  172.     MOVE.W    #TD_RAWREAD,IO_COMMAND(A1)
  173.     MOVE.B    #IOTDB_INDEXSYNC,IO_FLAGS(A1)
  174.     MOVE.L    (_SYSBASE).W,A6
  175.     JSR    _LVODOIO(A6)
  176.     TST.L    D0
  177.     BNE.W    .ERR
  178.     MOVE.L    PTB_SPACE(A5),A0
  179.     LEA.L    $7C00(A0),A1            ;end of buffer
  180.     LEA.L    $7C00(A0),A3
  181.     BSR.W    TRACKDECODE
  182.     TST.L    D0
  183.     BEQ.S    .R1OK
  184.     DBF    D5,.55
  185.     BRA.W    .NOTORG
  186.  
  187. .R1OK
  188.  
  189.     ADDQ.L    #1,D2
  190.     ST    D7                ;correct disk - nothing anymore
  191.                         ;to change
  192. .1    MOVE.B    (A3)+,(A2)+
  193.     ADDQ.L    #1,D4
  194.     CMP.L    #$1800,D4            ;tracklength
  195.     BNE.S    .2
  196.     MOVEQ.L    #0,D4                ;new track
  197. .2    SUBQ.L    #1,D3
  198.     BNE.W    .3
  199.  
  200.     MOVEQ.L    #0,D4
  201. .END    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1    ;switch motor off
  202.     MOVE.L    #0,IO_LENGTH(A1)
  203.     MOVE.W    #TD_MOTOR,IO_COMMAND(A1)
  204.     MOVE.L    (_SYSBASE).W,A6
  205.     JSR    _LVODOIO(A6)
  206.  
  207.     MOVE.L    D4,D0
  208.     RTS
  209.  
  210. .ERR    MOVEQ.L    #-1,D4
  211.     BRA.S    .END
  212.  
  213. .NOTORG    TST.L    D7            ;if the first time the original
  214.     BNE.S    .ERR            ;was not in the source drive,
  215.     ST    D7            ;youll be asked to put it there
  216.     LEA.L    LINE1(PC),A0
  217.     LEA.L    LINE2(PC),A1
  218.     MOVE.L    PTB_REQUEST(A5),A6
  219.     JSR    (A6)
  220.     TST.L    D0
  221.     BNE.S    .ERR
  222.     BRA.W    .NEU
  223.  
  224. LINE1    DC.B    'Please insert your original',0
  225.     EVEN
  226. LINE2    DC.B    'in the source drive.',0
  227.     EVEN
  228.  
  229. ;< A0 RAWTRACK
  230. ;< A1 TRACKBUFFER
  231. ;> D0 ERROR
  232.  
  233.  
  234. GETSYNC
  235. ;SYNCANFANG SUCHEN
  236. .SHF2    MOVEQ.L    #$10-1,D5
  237. .SHF1    MOVE.L    (A2),D0
  238.     LSR.L    D5,D0
  239.     CMP.W    #$4489,D0
  240.     BEQ.S    .SY
  241.     DBF    D5,.SHF1
  242.     ADDQ.L    #2,A2
  243.     CMP.L    A2,A4
  244.     BHI.S    .SHF2
  245.     BRA.S    .ERR
  246. .SY    
  247.     MOVE.L    (A2),D0
  248.     ADDQ.L    #2,A2
  249.     LSR.L    D5,D0
  250.     CMP.W    #$4489,D0
  251.     BNE.S    .SY
  252.  
  253. .1    MOVE.L    (A2),D0
  254.     ADDQ.L    #2,A2
  255.     LSR.L    D5,D0
  256.     CMP.W    #$4489,D0
  257.     BEQ.S    .1
  258.     SUBQ.L    #2,A2
  259.     CMP.L    A2,A4
  260.     BLS.S    .ERR
  261.     MOVEQ.L    #0,D0
  262.     RTS
  263.  
  264. .ERR    MOVEQ.L    #-1,D0
  265.     RTS
  266.  
  267. ;< A0 RAWTRACK
  268. ;< A1 TRACKBUFFER
  269. ;> D0 ERROR
  270. ;INTERN
  271. ;  D5 SHIFT-COUNT
  272. ;  D4 #$55555555
  273.  
  274. TRACKDECODE    MOVEM.L    A2/A3/A4/A5/D2/D3/D4/D5/D6/D7,-(A7)
  275.     MOVE.L    A0,A2
  276.     LEA.L    ($7C00-2*$1808)(A0),A4    ;LAST CHANCE FOR CORRECT SYNC
  277.  
  278.     MOVE.L    #$55555555,D4
  279. .TRY    BSR.W    GETSYNC
  280.     TST.L    D0
  281.     BNE.W    .ERR
  282.  
  283.     MOVE.L    (A2),D0
  284. ;    ADDQ.L    #2,A2
  285.     LSR.L    D5,D0
  286.     CMPI.W    #$2AAA,D0
  287.     BNE.W    .TRY
  288.  
  289.     MOVE.W    #$05FF,D7
  290.     MOVEQ    #$00,D3
  291. .1
  292. ;    MOVE.L    (A2)+,D0    ;original code
  293.                 ;my code to get a longword
  294.                 ;that it works, a2 has to point 2 bytes
  295.                 ;before the real location! (see commented
  296.                 ;addq #2,a2 before)
  297.     MOVE.L    (A2)+,D0    ;get higher part
  298.     MOVE.L    (A2),D6        ;get lower part
  299.     LSR.L    D5,D6        ;shift lower part with count
  300.     MOVEQ.L    #$20,D2        ;higher part has to be shifted to fill
  301.                 ;the rest-place, a longword has 20 bits
  302.     SUB.L    D5,D2
  303.     LSL.L    D2,D0
  304.     OR.L    D6,D0        ;my code ends
  305.  
  306.  
  307.     AND.L    D4,D0
  308.     ASL.L    #1,D0
  309.  
  310. ;    MOVE.L    (A2)+,D1
  311.                 ;my code to get a longword
  312.     MOVE.L    (A2)+,D1    ;get higher part
  313.     MOVE.L    (A2),D6        ;get lower part
  314.     LSR.L    D5,D6        ;shift lower part with count
  315.     MOVEQ.L    #$20,D2        ;higher part has to be shifted to fill
  316.                 ;the rest-place, a longword has 20 bits
  317.     SUB.L    D5,D2
  318.     LSL.L    D2,D1
  319.     OR.L    D6,D1        ;my code ends
  320.  
  321.     AND.L    D4,D1
  322.     OR.L    D1,D0
  323.     ADD.L    D0,D3
  324.     MOVE.L    D0,(A1)+
  325.     DBF    D7,.1
  326.  
  327.  
  328. ;    MOVE.L    (A2)+,D0
  329.                 ;my code to get a longword
  330.     MOVE.L    (A2)+,D0    ;get higher part
  331.     MOVE.L    (A2),D6        ;get lower part
  332.     LSR.L    D5,D6        ;shift lower part with count
  333.     MOVEQ.L    #$20,D2        ;higher part has to be shifted to fill
  334.                 ;the rest-place, a longword has 20 bits
  335.     SUB.L    D5,D2
  336.     LSL.L    D2,D0
  337.     OR.L    D6,D0        ;my code ends
  338.  
  339.     AND.L    D4,D0
  340.     ASL.L    #1,D0
  341. ;    MOVE.L    (A2)+,D1
  342.                 ;my code to get a longword
  343.     MOVE.L    (A2)+,D1    ;get higher part
  344.     MOVE.L    (A2),D6        ;get lower part
  345.     LSR.L    D5,D6        ;shift lower part with count
  346.     MOVEQ.L    #$20,D2        ;higher part has to be shifted to fill
  347.                 ;the rest-place, a longword has 20 bits
  348.     SUB.L    D5,D2
  349.     LSL.L    D2,D1
  350.     OR.L    D6,D1        ;my code ends
  351.  
  352.     ANDI.L    D4,D1
  353.     OR.L    D1,D0
  354.     CMP.L    D0,D3
  355.     BNE.W    .ERR
  356.  
  357.     MOVEQ.L    #0,D0
  358. .END
  359.     MOVEM.L    (A7)+,A2/A3/A4/A5/D2/D3/D4/D5/D6/D7
  360.     RTS
  361. .ERR
  362.     MOVEQ.L    #-1,D0
  363.     BRA.S    .END
  364.  
  365.